# 服务端
# 由blender运行
import socket
address = "127.0.0.1"
port = 6999

import threading
from queue import Queue
pool = Queue()


def run_server():
    # 服务端
    # 1.创建套接字
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 2.绑定套接字
    server.bind((address, port))  # 绑定要监听的端口
    # 3.监听套接字
    server.listen(5)  # 开始监听 表示可以使用五个链接排队
    while True:  # conn就是客户端链接过来而在服务端为期生成的一个链接实例
        # 4.等待连接
        # 等待链接,多个链接的时候就会出现问题,其实返回了两个值
        def job():
            try:
                conn, addr = server.accept()
            except KeyboardInterrupt:
                print("服务器退出!")
                return
            # 5.连接的处理
            print(conn, addr)
            while True:
                try:
                    data = conn.recv(1024)  # 接收数据
                    print('recive:', data.decode())  # 打印接收到的数据
                    conn.send(b"Hello Client!")  # 然后再发送数据
                except ConnectionResetError as e:
                    print('关闭了正在占线的链接！')
                    print(e.args)
                    break
            # 6.关闭连接
            conn.close()
        if pool.qsize() < 5:
            task = threading.Thread(target=job)
            pool.put(task)
            task.start()
        for _ in range(pool.qsize()):
            task = pool.get()

            if task.is_alive():
                pool.put(task)
            else:
                print("Close:", task.name)


if __name__ == "__main__":
    run_server()
